<?php

class GaleriController extends BackEndController
{
    public $dir_img_tmp_full = "tmp";
    public $dir_img_full = "img/galeri/full";
    public $dir_img_thumb = "img/galeri/thumb";
    public $full_width = 640;
    public $full_height = 480;
    public $thumb_width = 159;
    public $thumb_height = 106;

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    //public $layout='//layouts/column2';
    /**
     * @return array action filters
     */
    public function filters()
    {
        return array(
            'accessControl', // perform access control for CRUD operations
            'postOnly + delete', // we only allow deletion via POST request
        );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules()
    {
        return array(
            array(
                'allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions' => array(
                    'admin',
                    'delete',
                    'FormUpload',
                    'CropImg',
                    'Upload',
                    'index',
                    'view',
                    'FormUpload',
                    'CropImg',
                    'Upload',
                    'Croping',
                    'UbahStatus',
                    'createKategori',
                    'updateKategori',
                    'AdminKategori',
                    'create',
                    'update'),
                'users' => array('admin'),),
            array(
                'deny', // deny all users
                'users' => array('*'),),);
    }

    public function actionUbahStatus($id)
    {
        $model = $this->loadModel($id);
        $model->status = !$model->status;
        $model->save();
        if ($model->kategori) $this->redirect(array('galeri/adminkategori')); else
            $this->redirect(array('galeri/admin'));
    }

    public function actionCreateKategori()
    {
        $model = new Galeri;
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
        if (isset($_POST['Galeri'])) {
            $_POST['Galeri']['kat'] = 1;
            $model->attributes = $_POST['Galeri'];
            if ($model->save()) {
                $this->redirect(array('galeri/adminkategori'));
                app()->end();
            }
        }
        $list = $this->getParentList();
        $list[0] = 'No Kategori';
        $this->render('kategori', array(
            'model' => $model,
            'list_parent' => $list));
    }

    public function actionAdminKategori()
    {
        $criteria = new CDbCriteria();
        $criteria->addCondition("kat=1");
        $model = Galeri::model()->findAll($criteria);
        foreach ($model as $i => $news) $arrnew[] =
            array('no' => $i + 1, 'id' => $news['id'], 'nama' => $news['nama'], 'status' => $news['status']);
        $arrayDataProvider = new CArrayDataProvider($arrnew, array(
            'keyField' => 'id',));
        $this->render('daftar_kategori', array(
            'model' => $arrayDataProvider,));
    }

    public function actionUpdateKategori($id)
    {
        $model = $this->loadModel($id);
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
        if (isset($_POST['Galeri'])) {
            $model->attributes = $_POST['Galeri'];
            if ($model->save()) {
                $this->redirect(array('galeri/adminkategori'));
                app()->end();
            }
        }
        $list = $this->getParentList();
        $list[0] = 'No Kategori';
        $this->render('kategori', array(
            'model' => $model,
            'list_parent' => $list));
    }

    protected function getParentList($id = 0, $level = 0, $prefix = "-")
    {
        $listparent = array();
        $prefix_nama = '';
        for ($i = 0; $i < $level; $i++) {
            $prefix_nama .= $prefix;
        }
        $level++;
        $criteria = new CDbCriteria();
        $criteria->addCondition("parent_id=$id");
        $criteria->addCondition("kat=1");
//        $criteria->order = "urut_halaman";
        $parents = Galeri::model()->findAll($criteria);
        foreach ($parents as $parent) {
            $listparent[$parent['id']] = $prefix_nama . $parent['nama'];
            $child_parent = $this->getParentList($parent['id'], $level, $prefix);
//            if(count($child_parent)> 0)
//                array_push($listparent,$child_parent);
            foreach ($child_parent as $key => $child) {
                $listparent[$key] = $child;
            }
        }
        return $listparent;
    }

    /**
     * Displays a particular model.
     *
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id)
    {
        $this->render('view', array(
            'model' => $this->loadModel($id),));
    }
    protected function aftersave($filename){
        if (isset($_POST['image_url'])) {
            $image = $this->dir_img_tmp_full . DS;
            $image .= pathinfo($_POST['image_url'], PATHINFO_BASENAME);
            $this->Croping($image, $this->dir_img_full, $filename, $this->full_width, $this->full_height);
            $this->Croping($image, $this->dir_img_thumb,$filename, $this->thumb_width, $this->thumb_height);
            unlink($image);
        }
        $this->redirect(array('galeri/admin'));
        app()->end();
    }
    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
    {
        $model = new Galeri;
        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);
        if (isset($_POST['Galeri'])) {
            $_POST['Galeri']['tgl_buat'] = get_date_today();
            $_POST['Galeri']['tgl_update'] = get_date_today();
            $_POST['Galeri']['ip_update'] = $_SERVER['REMOTE_ADDR'];
            $model->attributes = $_POST['Galeri'];
            if ($model->save()) {
                $this->aftersave($model->id);
            }
        }
        $list = $this->getParentList();
        $list[0] = 'No Kategori';
        $this->render('create', array(
            'model' => $model,
            'list_parent' => $list));
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     *
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id)
    {
        $model = $this->loadModel($id);
        if (isset($_POST['Galeri'])) {
            $_POST['Galeri']['ip_update'] = $_SERVER['REMOTE_ADDR'];
            $model->attributes = $_POST['Galeri'];
            if ($model->save()) {
                $this->aftersave($model->id);
            }
        }
        $list = $this->getParentList();
        $list[0] = 'No Kategori';
        $this->render('update', array(
            'model' => $model,
            'list_parent' => $list));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     *
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id)
    {
        $this->loadModel($id)->delete();
        // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
        if (!isset($_GET['ajax'])) $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
    }

    /**
     * Lists all models.
     */
    public function actionIndex()
    {
        $dataProvider = new CActiveDataProvider('Galeri');
        $this->render('index', array(
            'dataProvider' => $dataProvider,));
    }

    /**
     * Manages all models.
     */
    public function actionAdmin()
    {
        $model = new Galeri('search');
        $model->unsetAttributes(); // clear any default values
        $_GET['Galeri']['kat'] = '0';
        if (isset($_GET['Galeri'])) $model->attributes = $_GET['Galeri'];
        $this->render('admin', array(
            'model' => $model,));
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     *
     * @param integer $id the ID of the model to be loaded
     *
     * @return Galeri the loaded model
     * @throws CHttpException
     */
    public function loadModel($id)
    {
        $model = Galeri::model()->findByPk($id);
        if ($model === null) throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     *
     * @param Galeri $model the model to be validated
     */
    protected function performAjaxValidation($model)
    {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'galeri-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    public function actionFormUpload()
    {
        $this->render('upload');
    }

    public function actionCropImg($fm)
    {
        $id = $fm;
        Yii::app()->clientScript->scriptMap = array(
            (YII_DEBUG ? 'jquery.js' : 'jquery.min.js') => false,);
        $imageUrl = bu() . '/' . $this->dir_img_tmp_full . '/' . $id;
        $this->renderPartial('cropImg', array('imageUrl' => $imageUrl), false, true);
    }

//    public function actionCroping()
//    {
//        $base = app()->basePath;
//        $pathThumb = $base . DS . '..' . DS . 'tmp' . DS . 'galeri' . DS . 'thumb';
//        if (!file_exists($pathThumb))
//            mkdir($pathThumb);
//        $image = $base . DS . '..' . DS . '..' . str_replace('/', DS, $_POST['image_url']);
//        $coords = array(
//            'x' => $_POST['AvatarForm_cropX'],
//            'y' => $_POST['AvatarForm_cropY'],
//            'w' => $_POST['AvatarForm_cropW'],
//            'h' => $_POST['AvatarForm_cropH'],
//        );
//        Yii::import("ext.yii-jcrop.EJCropper");
//        $crop = new EJCropper();
//        $crop->thumbPath = $pathThumb;
//        $thumb_name = $crop->crop($image, $coords);
//        echo $thumb_name;
//    }
    protected function Croping($image, $pathThumb, $name, $width, $height)
    {
        if (isset($_POST['cropID'])) {
            if (!file_exists($pathThumb)) // mkdir($pathThumb);
                mkdir($pathThumb, 0777, true);
            $coords = array(
                'x' => $_POST['AvatarForm_cropX'],
                'y' => $_POST['AvatarForm_cropY'],
                'w' => $_POST['AvatarForm_cropW'],
                'h' => $_POST['AvatarForm_cropH'],);
            Yii::import("ext.yii-jcrop.EJCropper");
            $crop = new EJCropper();
            $crop->targ_w = $width;
            $crop->targ_h = $height;
            $crop->thumbPath = $pathThumb;
            $crop->destName = $name;
            $thumb_name = $crop->crop($image, $coords);
            return $thumb_name;
        } else
            return false;
    }

    public function actionUpload()
    {
        $base = app()->basePath;
        Yii::import("ext.EAjaxUpload.qqFileUploader");
        $folder = $this->dir_img_tmp_full . '/'; // folder for uploaded files
        $allowedExtensions = array("jpg", "jpeg", "gif", "png"); //array("jpg","jpeg","gif","exe","mov" and etc...
        $sizeLimit = 1 * 1024 * 1024; // maximum file size in bytes
        $uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
        $result = $uploader->handleUpload($folder, true);
        $fileSize = filesize($folder . $result['filename']); //GETTING FILE SIZE
        $fileName = $result['filename']; //GETTING FILE NAME
        $result = htmlspecialchars(json_encode($result), ENT_NOQUOTES);
        echo $result; // it's array
    }
}
